/**
 * 错误处理工具
 * 用于过滤和处理开发环境中的无关错误信息
 */

class ErrorHandler {
  constructor() {
    this.init()
  }

  init() {
    // 只在开发环境中启用
    if (process.env.NODE_ENV === 'development') {
      this.setupErrorFilters()
    }
  }

  setupErrorFilters() {
    // 要过滤的错误关键词
    const ignoredErrors = [
      'ERR_CONNECTION_TIMED_OUT',
      'ERR_FILE_NOT_FOUND', 
      'sockjs-node',
      'chunk-vendors',
      'localhost:8080',
      '192.168.1.126:8080',
      'net::ERR_CONNECTION_REFUSED',
      'GET http://localhost',
      'GET http://192.168'
    ]

    // 过滤控制台错误
    const originalError = console.error
    console.error = (...args) => {
      const message = args.join(' ')
      
      // 检查是否是要忽略的错误
      const shouldIgnore = ignoredErrors.some(keyword => 
        message.includes(keyword)
      )
      
      if (!shouldIgnore) {
        originalError.apply(console, args)
      }
    }

    // 过滤控制台警告
    const originalWarn = console.warn
    console.warn = (...args) => {
      const message = args.join(' ')
      
      const shouldIgnore = ignoredErrors.some(keyword => 
        message.includes(keyword)
      )
      
      if (!shouldIgnore) {
        originalWarn.apply(console, args)
      }
    }

    // 捕获未处理的Promise拒绝
    if (typeof window !== 'undefined') {
      window.addEventListener('unhandledrejection', (event) => {
        if (this.shouldIgnoreError(event.reason)) {
          event.preventDefault()
        }
      })

      // 捕获全局错误
      window.addEventListener('error', (event) => {
        if (this.shouldIgnoreError(event.error || event.message)) {
          event.preventDefault()
        }
      })
    }
  }

  shouldIgnoreError(error) {
    if (!error) return false
    
    const message = typeof error === 'string' ? error : 
                   error.message || error.toString()
    
    const ignoredPatterns = [
      /ERR_CONNECTION_TIMED_OUT/,
      /ERR_FILE_NOT_FOUND/,
      /sockjs-node/,
      /chunk-vendors/,
      /localhost:8080/,
      /192\.168\.\d+\.\d+:8080/,
      /net::ERR_CONNECTION_REFUSED/,
      /Failed to fetch/
    ]

    return ignoredPatterns.some(pattern => pattern.test(message))
  }

  // 手动记录重要错误
  logError(error, context = '') {
    if (this.shouldIgnoreError(error)) {
      return
    }

    console.error(`[ErrorHandler] ${context}:`, error)
    
    // 在这里可以添加错误上报逻辑
    // 比如发送到日志服务等
  }

  // 记录警告
  logWarning(warning, context = '') {
    if (this.shouldIgnoreError(warning)) {
      return
    }

    console.warn(`[ErrorHandler] ${context}:`, warning)
  }
}

// 创建单例实例
const errorHandler = new ErrorHandler()

export default errorHandler 